﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

public partial class facturacion : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        bPProducto.Attributes.Add("OnClick", "javascript:popUpProductos();");
        bPClientes.Attributes.Add("OnClick", "javascript:popUpClientes();");
        bPFormaDePago.Attributes.Add("OnClick", "javascript:popUpFormaDePago();");

        lbFecha.Text = System.DateTime.Now.ToString();


        //Si la factura no se ha guardado todavia. Averigua el siguiente codigo de factura
        if (L_Estado.Text.Equals("Finalizado") == true)
        {
            String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlConnection conexion = new SqlConnection(cadena);
            try
            {
                conexion.Open();
                SqlCommand Cod_Factura = new SqlCommand();
                Cod_Factura.CommandText = "select coalesce(max(cod_factura_ventas),0)+1 from factura_ventas";
                Cod_Factura.Connection = conexion;
                Cod_Factura.CommandType = CommandType.Text;
                SqlDataReader read1 = Cod_Factura.ExecuteReader();
                read1.Read();
                L_Nro_factura.Text = read1.GetValue(0).ToString();
            }
            catch (Exception error)
            {
                Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
            }
            finally
            {
                conexion.Close();
            }
        }

        if (!IsPostBack)
        {
            SDSource_DetalleFactura.SelectParameters.Clear();
            SDSource_DetalleFactura.SelectCommand = "Select fvd.cod_factura_ventas_detalle as Nro,fvd.cod_terminado as Codigo_Producto,t.nombre,fvd.cantidad,fvd.precio_unitario,fvd.precio_total from factura_ventas_detalle fvd join terminado t on fvd.cod_terminado=t.cod_terminado where cod_factura_ventas=@cod_factura_ventas";
            SDSource_DetalleFactura.SelectParameters.Add("cod_factura_ventas", TypeCode.Int32, L_Nro_factura.Text);
            SDSource_DetalleFactura.SelectCommandType = SqlDataSourceCommandType.Text;
            GView_Detalle_Factura.DataBind();
        }
    }






    protected void Guardar_Factura()
    {
            if (L_Estado.Text.Equals("Finalizado") == true)
            {


                String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection conexion = new SqlConnection(cadena);
                try
                {
                    conexion.Open();

                    SqlCommand comando = new SqlCommand();
                    comando.Connection = conexion;
                    comando.CommandType = System.Data.CommandType.StoredProcedure;

                    comando.CommandText = "insertar_factura_ventas";
                    comando.Parameters.AddWithValue("@N_factura", L_Nro_factura.Text);
                    comando.Parameters.AddWithValue("@cod_cliente", nombreTex.Text);
                    comando.Parameters.AddWithValue("@cod_funcionario", nombreTex.Text);
                    comando.Parameters.AddWithValue("@cod_tipo_venta", condicionText.Text);
                    comando.Parameters.AddWithValue("@cod_caja", cajaTex.Text);
                    comando.Parameters.AddWithValue("@cod_forma_de_pago", formaTex.Text);

                    SqlDataReader reader = comando.ExecuteReader();
                    //GView_Factura_Ventas.DataBind();
                    L_Estado.Text = "Activo";

                }
                catch (Exception error)
                {
                    Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");

                }
                finally
                {
                    conexion.Close();
                }
            }
        }



    protected void AgregarProducto_Click(object sender, ImageClickEventArgs e)
    {
        if (nombreTex.Text == "" || formaTex.Text == "")
        {
            LError_Cliente.Visible = true;
            LError_FormaPago.Visible = true;
            LError_Texto.Visible = true;
        }
        else
        {
            LError_Cliente.Visible = false;
            LError_FormaPago.Visible = false;
            LError_Texto.Visible = false;
            Guardar_Factura();
            if (cod_Producto.Text == "" || cantidadTex.Text == "")
            {
                LError_Producto.Visible = true;
                LError_Cantidad.Visible = true;
                LError_Texto.Visible = true;
            }
            else
            {
                LError_Producto.Visible = false;
                LError_Cantidad.Visible = false;
                LError_Texto.Visible = false;
                String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection conexion = new SqlConnection(cadena);
                try
                {
                    conexion.Open();

                    
                    //Insertar un detalle
                    SqlCommand command = new SqlCommand("insertar_factura_ventas_detalle", conexion);
                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    command.Parameters.AddWithValue("@cod_factura_ventas", L_Nro_factura.Text);
                    command.Parameters.AddWithValue("@cantidad", cantidadTex.Text);
                    command.Parameters.AddWithValue("@cod_terminado", cod_Producto.Text);

                    SqlDataReader reader = command.ExecuteReader();

                    // this.FindControl("GVB_Eliminar").Visible = true;

                    GView_Detalle_Factura.DataBind();
                    reader.Close();

                    //Sumar el importe total en la casilla de importe
                    SqlCommand importe_total = new SqlCommand();
                    importe_total.CommandText = "Select sum(precio_total) from factura_ventas_detalle where cod_factura_ventas=" + L_Nro_factura.Text;
                    importe_total.Connection = conexion;
                    importe_total.CommandType = CommandType.Text;
                    SqlDataReader importe_total_reader = importe_total.ExecuteReader();
                    importe_total_reader.Read();
                    totalTex.Text = importe_total_reader.GetValue(0).ToString();
                    importe_total_reader.Close();


                    SDSource_DetalleFactura.SelectParameters.Clear();
                    SDSource_DetalleFactura.SelectCommand = "Select fvd.cod_terminado as Codigo_Producto,t.nombre,fvd.cantidad,fvd.precio_unitario,fvd.precio_total from factura_ventas_detalle fvd join terminado t on fvd.cod_terminado=t.cod_terminado where cod_factura_ventas=@cod_factura_ventas";
                    SDSource_DetalleFactura.SelectParameters.Add("cod_factura_ventas", TypeCode.Int32, L_Nro_factura.Text);
                    SDSource_DetalleFactura.SelectCommandType = SqlDataSourceCommandType.Text;
                    GView_Detalle_Factura.DataBind();



                    compararDeuda();
                    B_Cancelar2_Click(sender, e);
                }
                catch (Exception error)
                {
                    Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
                    Label3.Text = error.Message.ToString();
                }
                finally
                {
                    conexion.Close();
                }
            }
        }
    }
    protected void B_Cancelar2_Click(object sender, ImageClickEventArgs e)
    {
        cod_Producto.Text = "";
        cantidadTex.Text = "";
        //LError_Cantidad.Visible = false;
        //LError_Producto.Visible = false;
    }

    protected void Actualizar_Factura()
    {
        /*if ((ITBox_Cod_Cliente.Value.Equals("")  == true) || (ITBox_cod_funcionario.Value.Equals("") == true))
        {
            if (ITBox_Cod_Cliente.Value.Equals("") == true)
                LError_Cliente.Visible = true;
            if (ITBox_cod_funcionario.Value.Equals("") == true)
                LError_Funcionario.Visible = true;
        }
        else
        {
            LError_Funcionario.Visible = false;
            LError_Cliente.Visible = false;
        */
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);
        try
        {
            //Si no existe la cabecera de la factura

            Guardar_Factura();

            SqlCommand comando = new SqlCommand();
            conexion.Open();
            comando.Connection = conexion;
            comando.CommandType = System.Data.CommandType.StoredProcedure;
            comando.CommandText = "insertar_factura_ventas";
            comando.Parameters.AddWithValue("@N_factura", Convert.ToInt32(L_Nro_factura.Text));
            comando.Parameters.AddWithValue("@cod_cliente", Convert.ToInt32(nombreTex.Text));
            comando.Parameters.AddWithValue("@cod_funcionario", 1);
            comando.Parameters.AddWithValue("@cod_tipo_venta", Convert.ToInt32(condicionText.Text));
            comando.Parameters.AddWithValue("@cod_caja", Convert.ToInt32(cajaTex.Text));
            comando.Parameters.AddWithValue("@cod_forma_de_pago", Convert.ToInt32(nCuotaTex.Text));
            SqlDataReader reader = comando.ExecuteReader();


        }
        catch (Exception error)
        {
            Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
        }
        finally
        {
            conexion.Close();
        }
    }
    protected void cancelarProducto_Click(object sender, ImageClickEventArgs e)
    {
        cod_Producto.Text = "";
        cantidadTex.Text = "";
    }
    protected void finalizarFactura_Click(object sender, ImageClickEventArgs e)
    {

    }
    protected void cancelar2_Click(object sender, ImageClickEventArgs e)
    {
        /*GView_Detalle_Factura.DataSourceID = null;
        GView_Detalle_Factura.DataSource = null;
        GView_Detalle_Factura.DataBind();
        */
        L_Estado.Text = "Finalizado";
        }
    protected void compararDeuda()
    {
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);
        try
        {
            conexion.Open();
            SqlCommand importe_total = new SqlCommand();
            importe_total.CommandText = "select sum(cantidad) from pagos_ventas where cod_factura_ventas=" + L_Nro_factura.Text;
            importe_total.Connection = conexion;
            importe_total.CommandType = CommandType.Text;
            SqlDataReader importe_total_reader = importe_total.ExecuteReader();
            importe_total_reader.Read();
            valorTemp.Text = importe_total_reader.GetValue(0).ToString();
            importe_total_reader.Close();
            if (valorTemp.Text == "")
            {
                valorTemp.Text = "0";
            }
            valorRestanteText.Text = Convert.ToString((Convert.ToInt32(totalTex.Text) - Convert.ToInt32(valorTemp.Text)));

        }
        catch (Exception error)
        {
            Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
            Label3.Text = error.Message.ToString();
        }
        finally
        {
            conexion.Close();
        }

    }
    protected void agregarPago_Click(object sender, ImageClickEventArgs e)
    {
        if ((Convert.ToInt32(montoText.Text)) > (Convert.ToInt32(valorRestanteText.Text)))
        {
            Page.RegisterStartupScript("alerta", "<SCRIPT> alerta('El valor supera al importe de la factura') </SCRIPT>");
        }
        else
        {
            String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlConnection conexion = new SqlConnection(cadena);
            try
            {
                SqlCommand comando = new SqlCommand();
                conexion.Open();
                comando.Connection = conexion;
                comando.CommandType = System.Data.CommandType.StoredProcedure;
                comando.CommandText = "insertar_pagos_ventas";
                comando.Parameters.AddWithValue("@cod_factura_ventas", Convert.ToInt32(L_Nro_factura.Text));
                comando.Parameters.AddWithValue("@cod_banco", dCod_Banco.Text);
                comando.Parameters.AddWithValue("@cod_forma_a_pagar", dCod_FormaAPagar.Text);
                comando.Parameters.AddWithValue("@cuenta_bancaria", cuentaBancariaText.Text);
                comando.Parameters.AddWithValue("@numero", numeroTarjetaText.Text);
                comando.Parameters.AddWithValue("@cantidad", montoText.Text);
                SqlDataReader reader = comando.ExecuteReader();
                compararDeuda();

            }
            catch (Exception error)
            {
                Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
            }
            finally
            {
                conexion.Close();
            }
        }
    }
    protected void finalizarPago_Click(object sender, ImageClickEventArgs e)
    {
        if (montoText.Text == "")
        {
            montoText.Text = "0";
        }
        if ((Convert.ToInt32(montoText.Text)) > (Convert.ToInt32(valorRestanteText.Text)))
        {
            Page.RegisterStartupScript("alerta", "<SCRIPT> alerta('El valor supera al importe de la factura') </SCRIPT>");
        }
        if ((Convert.ToInt32(montoText.Text)) == (Convert.ToInt32(valorRestanteText.Text))) {
            L_Estado.Text = "Finalizado";
            GView_Detalle_Factura.Columns.Clear();
            GView_Detalle_Factura.DataBind();
            String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlConnection conexion = new SqlConnection(cadena);
            try
            {
                SqlCommand comando = new SqlCommand();
                conexion.Open();
                comando.Connection = conexion;
                comando.CommandType = System.Data.CommandType.StoredProcedure;
                comando.CommandText = "cerrar_factura_cc";
                comando.Parameters.AddWithValue("@cod_factura_ventas", Convert.ToInt32(L_Nro_factura.Text));
                SqlDataReader reader = comando.ExecuteReader();
                compararDeuda();

            }
            catch (Exception error)
            {
                Page.RegisterStartupScript("alerta", "<SCRIPT> alerta(" + error.Message.ToString() + ") </SCRIPT>");
            }
            finally
            {
                conexion.Close();
            }


        }
        if ((Convert.ToInt32(montoText.Text)) <(Convert.ToInt32(valorRestanteText.Text)))
        {
            Page.RegisterStartupScript("alerta", "<SCRIPT> alerta('El pago de la factura aun no fue totalizada') </SCRIPT>");
        }
    }
}

